#ifndef __THREAD_FIXED_POINT_H
#define __THREAD_FIXED_POINT_H

typedef int fixed_t;
// 17.14  左边17位表示整数，右边14位表示小数部分
#define SHIFT_AMOUNT 14
// 整数变成小数，直接左移
#define INT2FLOAT(n) ((fixed_t)(n << SHIFT_AMOUNT))
// 浮点数变成zheng数，向0舍入，直接右移
#define FLOAT2INTPART(x) (x >> SHIFT_AMOUNT)
// 浮点数变zheng数，四舍五入
#define FLOAT2INTNEAR(x) (x >= 0 ? ((x + (1 << (SHIFT_AMOUNT - 1))) >> SHIFT_AMOUNT) : ((x - (1 << SHIFT_AMOUNT)) >> SHIFT_AMOUNT))
// 浮点数+浮点数
#define FLOATADDFLOAT(x, y) (x + y)
// 浮点数-浮点数
#define FLOATSUBFLOAT(x, y) (x - y)
// 浮点数+整数，先把整数转为浮点数
#define FLOATADDINT(x, n) (x + (n << SHIFT_AMOUNT))
// 浮点数-整数，先把整数转为浮点数
#define FLOATSUBINT(x, n) (x - (n << SHIFT_AMOUNT))
// 浮点数*浮点数
#define FLOATMULFLOAT(x, y) ((((int64_t)x) * y) >> SHIFT_AMOUNT)
// 浮点数*整数
#define FLOATMULINT(x, n) (x * n)
// 浮点数÷浮点数
#define FLOATDIVFLOAT(x, y) ((((int64_t)x) << SHIFT_AMOUNT) / y)
// 浮点数÷整数
#define FLOATDIVINT(x, n) (x / n)

#endif